using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
using NEXEntidad;
using NEXServicio;

namespace A_CargaBiblioteca
{
    public partial class Buscador : UserControl
    {
        System.Reflection.Assembly ass;
        #region Constructores
        public Buscador()
        {
            InitializeComponent();

        }

        #endregion

        #region Campos/Propiedades
        
        private String fCodigo;
        public String Codigo
        {
            get { return fCodigo; }
            set
            {

                fCodigo = value;
                if (this.fCodigo == "" || this.fCodigo == null)
                {
                    this.txtValor.Text = "";
                    this.txtCodigo.Text = "";
                }
                else
                {
                    ass = System.Reflection.Assembly.Load("NEXEntidad");
                    NEXEntidadElemento objeto;
                    Type t;
                    switch (fTipoObjeto)
                    {
                        case Enumeraciones.TypeObjeto.Autor:
                            t = ass.GetType("NEXEntidad.Autor");
                            break;
                        case Enumeraciones.TypeObjeto.Pais:
                            t = ass.GetType("NEXEntidad.Pais");
                            break;
                        default:
                            t = null;
                            break;
                    }
                    // Autor unAutor = new Autor(Convert.ToInt32(this.fCodigo));
                    objeto = (NEXEntidadElemento)Activator.CreateInstance(t, Convert.ToInt32(this.fCodigo));
                    objeto.LlamarAObtener();
                    if (objeto.ToString() != "")
                    {
                        txtValor.Text = objeto.ToString();
                        txtCodigo.Text = objeto.Id.ToString();
                    }
                }
            }
        }

        public String NombrePais
        {
            get { return txtValor.Text; }
            
        }

        private Enumeraciones.TypeObjeto fTipoObjeto;
        public Enumeraciones.TypeObjeto TipoObjeto
        {
            get { return fTipoObjeto; }
            set { fTipoObjeto = value; }
        }


        #endregion

        #region Eventos del Control
        private void btnBuscar_Click(object sender, EventArgs e)
        {
            ass = System.Reflection.Assembly.Load("NEXEntidad");
            ElementoCollection listaelemento;
            this.Cursor = Cursors.WaitCursor;
            switch (fTipoObjeto)
            {
                case Enumeraciones.TypeObjeto.Autor:
                    listaelemento = NEXEntidad.Autor.ListarEntidad(txtValor.Text);
                    break;
                case Enumeraciones.TypeObjeto.Pais:
                    listaelemento = NEXEntidad.Pais.ListarEntidad(txtValor.Text);
                    break;
                default:
                    listaelemento = null;
                    break;
            }
            //listaelemento = NEXEntidad.Autor.ListarEntidad(txtValor.Text);

            switch (listaelemento.Count)
            {
                case 0:
                    txtCodigo.Text = "";
                    txtValor.Text = "";
                    this.Cursor = Cursors.Default;
                    MessageBox.Show("No se encuentra resultado");
                    break;
                case 1:
                    txtCodigo.Text = listaelemento.PrimerItem.Id.ToString();
                    txtValor.Text = listaelemento.PrimerItem.Descripcion;
                    fCodigo = txtCodigo.Text;
                    this.Cursor = Cursors.Default;
                    break;
                default:
                    frmBuscador formulario = new frmBuscador();
                    formulario.ListElementos = listaelemento;
                    this.Cursor = Cursors.Default;
                    if (formulario.ShowDialog() == DialogResult.OK)
                    {
                        txtCodigo.Text = formulario.Codigo;
                        txtValor.Text = formulario.Descripcion;
                        fCodigo = txtCodigo.Text;
                    }

                    break;
            }

        }

        private void Buscador_Resize(object sender, EventArgs e)
        {
            this.txtValor.Width = this.Width - (this.btnBuscar.Width + this.txtCodigo.Width + 20);
            this.btnBuscar.Left = this.txtValor.Left + this.txtValor.Width + 4;
        }


        private void txtValor_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == '\r')
                this.btnBuscar_Click(sender, e);
        }

        private void Buscador_Load(object sender, EventArgs e)
        {

#if DEBUG
            //ass = System.Reflection.Assembly.Load("NEXEntidad");
#endif


        }
        #endregion




    }
}
